package top.lixunda.ecommerce.server.user.api.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import top.lixunda.commerce.common.core.entity.MessageObject;
import top.lixunda.common.validate.XumValid;
import top.lixunda.ecommerce.server.business.api.entity.vo.ImageUploadTokenVO;
import top.lixunda.ecommerce.server.business.api.entity.QiNiuCallbackBody;
import top.lixunda.ecommerce.server.user.api.entity.db.UserDetailDO;
import top.lixunda.ecommerce.server.user.api.entity.dto.UserInfoChgDTO;
import top.lixunda.ecommerce.server.user.api.entity.db.UserInfoDO;
import top.lixunda.ecommerce.server.user.api.entity.vo.UserPublicInfoVO;

import java.util.List;

/**
 * 用户基本信息操作
 *
 * @author Xumda
 * @version time:2019/12/14 17:03
 */
@Api("用户基本信息操作")
@RequestMapping("/userInfo")
public interface IUserInfoController {

    /**
     * 根据用户类型查询人员基本信息，发送消息时使用
     *
     * @param type 用户类型
     * @return 用户信息列表
     */
    @ApiOperation("根据用户类型查询人员基本信息，发送消息时使用")
    @GetMapping("queryUserByType")
    MessageObject<List<UserInfoDO>> queryUserByType(
            @RequestParam("type") String type);

    /**
     * 查询当前登陆账户基本信息
     *
     * @return 用户基本信息
     */
    @ApiOperation("查询当前登陆账户基本信息")
    @GetMapping("queryCurrentUserInfo")
    MessageObject<UserInfoDO> queryCurrentUserInfo();

    /**
     * 查询当前登陆账户详细信息
     *
     * @return 用户详细信息
     */
    @ApiOperation("查询当前登陆账户详细信息")
    @GetMapping("queryCurrentUserDetail")
    MessageObject<UserDetailDO> queryCurrentUserDetail();

    /**
     * 通过用户编号查询普通用户的公开信息
     *
     * @param id 用户编号
     * @return 用户基本信息
     */
    @ApiOperation("查询当前登陆账户基本信息")
    @GetMapping("queryUserPublicInfoById")
    MessageObject<UserPublicInfoVO> queryUserPublicInfoById(@RequestParam("id") Integer id);

    /**
     * 通过用户编号查询普通用户的公开信息, 批量查询
     *
     * @param ids 用户编号
     * @return 用户基本信息
     */
    @ApiOperation("查询当前登陆账户基本信息")
    @PostMapping("queryUserPublicInfoByIds")
    MessageObject<List<UserPublicInfoVO>> queryUserPublicInfoByIds(@RequestBody List<Integer> ids);

    /**
     * 更新当前登陆账户基本信息
     *
     * @param userInfoChgDTO UserInfoChgDTO
     * @return 更改后的用户基本信息
     */
    @ApiOperation("更新当前登陆账户基本信息")
    @PostMapping("updateCurrentUserInfo")
    MessageObject<UserInfoDO> updateCurrentUserInfo(@RequestBody @XumValid UserInfoChgDTO userInfoChgDTO);

    /**
     * 获取上传头像凭证
     *
     * @return 上传头像凭证
     */
    @ApiOperation("获取上传头像凭证")
    @GetMapping("createHeadImageUploadToken")
    MessageObject<ImageUploadTokenVO> createHeadImageUploadToken();

    /**
     * 获取上传头像凭证
     *
     * @param qiNiuCallbackBody 回调参数
     * @return 上传头像凭证
     */
    @ApiOperation("获取上传头像凭证")
    @PostMapping("headImageUploadCallback")
    MessageObject<QiNiuCallbackBody> headImageUploadCallback(@RequestBody QiNiuCallbackBody qiNiuCallbackBody);

}
